#ifndef COLLIDABLE_H
#define COLLIDABLE_H

#include <vector>
#include "BindingSphere.h"

//interface for all collidable objects such as the ship, bullets, barriers and invaders
namespace collisions
{
	enum MatterType {SHIPBULLET, INVADERBULLET, INVADER, SHIP, BARRIER};

	class Collidable
	{
	public:
		//used as our primary test in order to quickly reduce the number
		//potential collisions which we have to verify at a greater precision
		virtual BindingSphere getBindingSphere() = 0;
		
		//returns a list of BindingSpheres that tightly define the object's
		//collidable space
		virtual std::vector<BindingSphere> getBindingShapes() = 0;
		
		//Used to properly identify how to react to collisions
		virtual MatterType getMatterType() = 0;
		
		//Called when there was a collision.  Passes the type of object
		//that this Collidable object has collided with.
		virtual void handleCollision(MatterType type, BindingSphere sphere) = 0;
	};
}

#endif